package come.bjpowernode.javase.reflect;

import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;

/*
研究一下文件路径的问题。
    怎么获取一个文件的绝对路径，以下讲解的这种方式是通用的。单前提是：文件
    需要在类路径下，才能用这种方式。
 */
public class AbsolutePath {
    public static void main(String[] args)throws Exception {
        //这种方式的路径的缺点是，移植性差，在IDEA中默认的当前路径是
        // project的个根，这个代码假设离开了IDEA，换到了其它位置，可能
        //他的路径就不是project的根了，这种路劲就无效了
        //FileReader reader = new FileReader("chapter25/classInfo.properties");

        //接下来说一种比较通用的路径，即使代码换位置了，这样编写的仍然是通用的。
        //注意：使用以下通用方式的前提是，必须文件必须在类路径下，凡是在src下的
        //都是类路径，src是类的根路径
        /*
        解释：
            Thread.currentThread() 当前线程对象
            getContextClassLoader()是线程对象的方法，可以获取当前线程的类加载器对象
            getResource()这是类加载器对象的方法，当前线程的类加载器默认从类的根路径下加载资源
            getPath()
         */

        //String path = "abc";
        //src路径
        String path = Thread.currentThread().getContextClassLoader()
                .getResource("classInfo2.properties").getPath();
        System.out.println(path);

        //项目路径reflect
        InputStream resourceAsStream  = AbsolutePath.class.getResourceAsStream("Reflect课堂笔记");
        InputStreamReader inputStreamReader = new InputStreamReader(resourceAsStream);
        char[] bytes = new char[resourceAsStream.available()];
        int count;
        if ((count = inputStreamReader.read(bytes)) != -1){
            System.out.println(new String(bytes,0,count));
        }

        //获取db.properties文件的绝对路径(注意从类的根路径下开始写)
        String path2 = Thread.currentThread().getContextClassLoader()
                    .getResource("come/bjpowernode/javase/reflect/bin/dn.properties").getPath();
        System.out.println(path2);
    }


}
